package com.ddpt.platform.common.export.dto;

import com.ddpt.platform.common.base.BaseEntity;
import com.ddpt.platform.common.base.DataAuthSessionUser;
import com.ddpt.platform.common.export.ExportAppEnum;
import com.ddpt.platform.common.util.AssertUtil;
import lombok.Getter;
import lombok.Setter;

import java.util.List;

/**
 * 顶级dto - 导出
 *
 * @author : zhanggsc
 * @Data : 2023/2/24 14:45
 */
@Getter
@Setter
public class ExportRequestDto extends BaseEntity {

    /**
     * 导出事件名称
     */
    protected String exportName;

    /**
     * 是否全量查询
     * 0 全量查询
     * 1 查询条数
     */
    private Integer countLimit;

    /**
     * 是否按条件查询
     * 0 不按条件查询
     * 1 按条件查询
     */
    private Integer conditionLimit;


    /**
     * 应用类型 - 后端获取
     *
     * @see ExportAppEnum
     */
    protected ExportAppEnum exportApp;

    /**
     * 开始时间
     */
    protected Long exportStartTime;

    /**
     * 结束时间
     */
    protected Long exportEndTime;

    /**
     * 截取条数 - 单次最高50000
     */
    protected Integer showCount;

    /**
     * 第几页 - 不传视为第一页
     */
    protected Integer currentPage;

    /**
     * 返回字段
     */
    protected List<String> exportVos;

    /**
     * 唯一约束 签名 - 后端生成
     */
    protected String sign;

    /**
     * 商户id - 后端获取
     */
    protected Long merchantId;

    /**
     * 机构id - 后端获取
     */
    protected Long insId;

    /**
     * 用户id - 后端获取
     */
    protected Long userId;

    protected List<Long> insIds;

    /**
     * 所拥有的数据权限机构对应的员工id集合
     */
    private List<Long> dataEmpIds;

    protected DataAuthSessionUser user;

    private Long merchantUserId;

    /**
     * 参数签名拼接方法
     *
     * @return
     */
    public String montage() {
        return exportName + exportApp.name() + currentPage + showCount + exportStartTime + exportEndTime + exportVos.toString();
    }

    /**
     * 校验
     */
    public void verification() {
        AssertUtil.isEmpty(exportName, "导出统计命名为空");
        AssertUtil.isNull(exportApp, "导出统计应用类型为空");
        this.setShowCount(showCount == null || showCount > 10000 || showCount < 0 ? 10000 : showCount);
        this.setCurrentPage(currentPage != null && currentPage > 0 ? currentPage : 1);
    }

    /**
     * 全量查询获取子类类型
     */
    public String getSpeType() {
        return "";
    }

    /**
     * 全量查询设置子类类型
     */
    public void setSpeType(String type) {
    }
}
